#include <iostream>
#include <vector>

using namespace std;

int getArea(vector<vector<int>>&  grid, int i, int j)
{

    if (i == grid.size() || i < 0)
        return 0;
    else if (j == grid[0].size() || j < 0)
        return 0;

    if (grid[i][j] == 1)
    {
        grid[i][j] = 0;
        return 1 + getArea(grid, i + 1, j)   //上
                 + getArea(grid, i - 1, j)       //下
                 + getArea(grid, i, j + 1)      //右
                 + getArea(grid, i, j - 1);      //左
    }
    return 0;
}

class Solution
{
public:
    int maxAreaOfIsland(vector<vector<int>>& grid) 
    {
        int maxArea = 0;
        int area = 0;

        for (int i = 0; i < grid.size(); i++)
        {
            for (int j = 0; j < grid[0].size(); j++)
            {
                if (grid[i][j] == 1)
                {
                    //以此为中心，向四周扩散
                    area = getArea(grid, i, j);
                    maxArea = max(maxArea, area);
                }
            }
        }
        
        return maxArea;
    }
};


// FIXME: 
//  可以先把 3_code_practice 的练习做完，然后在做这里的习题
//  这里习题的主要的目的是，不仅仅把最关键的算法写出了，而是把完整的程序写出
//  自己把测试数据构建出来，外围的读取数据函数，测试代码等

int main()
{
    // stage 1: read data

    // stage 2: test algorithm

    // stage 3: output results

    return 0;
}

